/**
 * 
 */
package medOffice;

import java.util.GregorianCalendar;

import junit.framework.Assert;

import org.junit.Test;

/**
 * Testes do Verificador (nome, cpf, endereco, telefone, email e data de nascimento )
 * @author Ana Clara Lacerda
 *
 */
public class VerificadorTest extends Verificador{
	
	@Test
	public void nomesTestes() {
		Assert.assertFalse("Nao deveria verificar o nome com numeros", verificaNome("ana12"));
		Assert.assertTrue("Nomes com pontos sao validos", verificaNome("Ana C. L."));
		Assert.assertTrue("Nomes com virgulas sao validos", verificaNome("Clara, Ana"));
		Assert.assertFalse("Nao deveria verificar o nome vazio", verificaNome(""));
		Assert.assertFalse("Nao deveria verificar o nome null", verificaNome(null));
		Assert.assertTrue("Deveria de verificado o nome", verificaNome("Ana Clara"));	
	}
	
	@Test
	public void cpfTestes() {
		Assert.assertFalse("Nao deveria verificar o CPF com tamanho menor que 12", verificaCpf("00000000-00"));
		Assert.assertFalse("Nao deveria verificar o CPF com tamamho maior que 12", verificaCpf("0000000000-00"));
		Assert.assertFalse("Nao deveria verificar o CPF com tamamho maior que 12", verificaCpf("000000000-000"));
		Assert.assertFalse("Nao deveria verificar o CPF sem o digito '-'", verificaCpf("00000000000"));
		Assert.assertFalse("Nao deveria verificar o CPF com letras", verificaCpf("000000000a00"));
		Assert.assertFalse("Nao deveria verificar o CPF com digitos diferente de numeros e '-'", verificaCpf("00000.000-00"));
		Assert.assertFalse("Nao deveria verificar o CPF vazio", verificaCpf(""));
		Assert.assertFalse("Nao deveria verificar o CPF null", verificaCpf(null));
		Assert.assertTrue("Deveria de verificado o CPF", verificaCpf("123456789-00"));
	}
	
	@Test
	public void enderecoTestes() {
		Assert.assertFalse("Nao deveria verificar o endereco null", verificaEndereco(null));
		Assert.assertTrue("Deveria verificar o endereco", verificaEndereco("rua, 181, bairro"));
		Assert.assertTrue("Deveria verificar o endereco", verificaEndereco("rua, bairro"));
		Assert.assertTrue("Deveria verificar o endereco", verificaEndereco("rua, bairro, 181"));
		Assert.assertTrue("Deveria verificar o endereco", verificaEndereco("rua, bairro, 118/ apto 102"));
	}
	
	@Test
	public void telefoneTestes() {
		Assert.assertFalse("Nao deveria verificar telefone sem parenteses", verificaTelefone("83 3222-2222"));
		Assert.assertFalse("Nao deveria verificar o telefone com tamanho menor", verificaTelefone("(0) 1234-1234"));
		Assert.assertFalse("Nao deveria verificar o telefone sem parenteses", verificaTelefone("(00 1234-1234"));
		Assert.assertFalse("Nao deveria verificar o telefone com letras", verificaTelefone("(a0) 1234-1234"));
		Assert.assertFalse("Nao deveria verificar o telefone com letras", verificaTelefone("(00) a123-1234"));
		Assert.assertFalse("Nao deveria verificar o telefone com tamamho menor", verificaTelefone("(00) 123-1234"));
		Assert.assertFalse("Nao deveria verificar o telefone sem o digito '-'", verificaTelefone("(00) 1234 1234"));
		Assert.assertFalse("Nao deveria verificar o telefone com letras", verificaTelefone("(00) 1234-123A"));
		Assert.assertFalse("Nao deveria verificar o telefone com tamanho menor", verificaTelefone("(00) 1234-123"));
		Assert.assertFalse("Nao deveria verificar o telefone com letras", verificaTelefone("(00) a123-12345"));
		Assert.assertTrue("Deveria ter verificado o telefone", verificaTelefone("(83) 3333-3333"));
	}
	
	@Test
	public void emailTestes() {
		Assert.assertFalse("Nao deveria ter verificado o email sem usuario", verificaEmail("@gmail.com"));
		Assert.assertFalse("Nao deveria ter verificado o email sem complemento", verificaEmail("aninha@.com"));
		Assert.assertFalse("Nao deveria ter verificado o email sem ponto", verificaEmail("aninha@gmailcom"));
		Assert.assertFalse("Nao deveria ter verificado o email sem @", verificaEmail("aninhagmail.com"));
		Assert.assertFalse("Nao deveria ter verificado o email com numeros no final", verificaEmail("aninha@gmail.c12om"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abc@em4il.com"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abc@email"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("@email.com"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abcemail.com"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abc@email.c0m"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abc@.c0m"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abc@email.com.b2"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abc@em4il..com"));
		Assert.assertFalse("Nao deveria verificar email", verificaEmail("abc@em4il.com."));
		Assert.assertTrue("Deveria verificar email", verificaEmail("abc1@email.com.br"));
		Assert.assertTrue("Deveria verificar email", verificaEmail("maria@email.com"));
	}
	
	@Test
	public void dataDeNascimentoTestes() {
		Assert.assertFalse("Nao deveria verificar data", verificaDataPassada(null));
		Assert.assertFalse("Nao deveria verificar data atual", verificaDataPassada(new GregorianCalendar()));
		Assert.assertFalse("Nao deveria verificar data do futuro", verificaDataPassada(
				new GregorianCalendar(2010, 4, 3)));
		Assert.assertFalse("Nao deveria verificar data do futuro", verificaDataPassada(
				new GregorianCalendar(2009, 11, 12)));
		Assert.assertTrue("Deveria verificar data", verificaDataPassada(
				new GregorianCalendar(1991, 3, 13)));
	}

}
